#线性编码版本2：数据和代码分离
#配置文件
#使用sql语句文件实现数据库初始化

import pymysql
conn=pymysql.connect(host='192.168.196.128',db='wa_test',user='root',passwd='123456')
cursor = conn.cursor()
sqls=open('apitest.sql','r',encoding='utf-8')
for sql in sqls:
    if sql.strip() and not sql.startswith('--'):
          cursor.execute(sql)
conn.commit()
conn.close()
    # if sql.strip() and not sql.startswith('--'):
    #     print(sql,end='')

# 执行excel中的测试用例
# import requests
# import pandas
#
# data=pandas.read_excel('login.xlsx',usecols=['用例编号','用例说明','接口路径','请求方法','参数','预期结果'])
# case_info=data['用例编号']+':'+data['用例说明']
# url='http://192.168.196.128'+data['接口路径']
# data.insert(0,'用例信息',case_info)
# data.insert(1,'接口地址',url)
# data.drop(['用例编号','用例说明','接口路径'],axis=1,inplace=True)
# data['参数']=data['参数'].apply(eval)
# data['预期结果']=data['预期结果'].apply(eval)
# cases=data.values.tolist()
# for case in cases: #case是一条用例，相当于一行
#     case_info,url,method,args,expect=case
#     res=requests.post(url,args)
#     actual=res.json()
#     if actual == expect:
#         print(f'{case_info}==响应结果对比通过')
#     else:
#         print(f'{case_info}==响应结果对比失败==预期：{expect}==实际：{actual}')

import requests
import pandas
data=pandas.read_excel('signup.xlsx',usecols=['用例编号','用例说明','接口路径','请求方法','参数','预期结果','验库sql','预期行数'])
case_info=data['用例编号']+':'+data['用例说明']
url='http://192.168.196.128'+data['接口路径']
data.insert(0,'用例信息',case_info)
data.insert(1,'接口地址',url)
data.drop(['用例编号','用例说明','接口路径'],axis=1,inplace=True)
data['参数']=data['参数'].apply(eval)
data['预期结果']=data['预期结果'].apply(eval)
cases=data.values.tolist()
for case in cases: #case是一条用例，相当于一行
    case_info,url,method,args,expect,check_sql,expect_rows=case
    # res=requests.post(url,json=args)
    res=eval(f"requests.{method}('{url}',json=args)")
    actual=res.json()
    if  expect==actual:
        print(f'{case_info}==响应结果对比通过')
    else:
        print(f'{case_info}==响应结果对比失败==预期：{expect}==实际：{actual}')
#落库检查
    conn=pymysql.connect(host='192.168.196.128', db='wa_test', user='root', passwd='123456')
    cursor=conn.cursor()
    cursor.execute(check_sql)
    actual_rows=cursor.fetchone()[0]
    if actual_rows==expect_rows:
        print(f'{case_info}==验库成功')
    else:
         print(f'{case_info}==验库失败==要检查的数据：{args}=预期行数：{expect_rows}==实际：{actual_rows}')


